#include <iostream>
using namespace std;

// 模拟RAII类的模版
template<class T>
class RAII{
    // 1.在构造函数中初始化资源
    RAII(T * data)
    :_data(data)
    {
        cout << "RAII()" << endl;
    }
    // 2.在析构函数中释放资源
    ~RAII(){
        if(_data){
            delete [] _data;
            _data = nullptr;
        }
        cout << "~RAII()" << endl;
    }

    // 4.设置一些访问资源的方法
    T * operator->(){
        return _data;
    }

    T & operator*(){
        return *_data;
    }
    T * get(){
        return _data;
    }
    T * set(T * data){
        if(_data){
            delete [] _data;
            _data = nullptr;
        }
        _data = data;
    }
private:
    // 设置拷贝构造和赋值运算为私有的
    // 实现对象语义
    // 拷贝构造
    // 3.不允许进行复制或者赋值操作
    RAII(const RAII & rhs){
    }
    // 赋值运算符
    RAII & operator=(const RAII & rhs){}

    T * _data;
};

void test(){


}

int main(int atgc, char * argv[])
{
    test();
    return 0;
}

